import router, { asyncRoutes, constantRoutes } from '../../router'
// 状态(数据)
const state = () => {
  return {
    // 默认合并静态路由
    allRoutes: constantRoutes
  }
}
// mutations 修改数据的方法 同步
const mutations = {
  setRoutes(state, newRoutes) {
    state.allRoutes = newRoutes
  }
}
// actions 修改数据的方法 异步
const actions = {
  filterRoutes(context) {
    // 获取用户可以访问的 menus
    const _menus = context.rootState.user.userInfo.roles.menus
    // 和动态的路由去比较
    const _newRoutes = asyncRoutes.filter(v => {
      // 筛选children 并赋值给children属性
      // v.children = v.children.filter(child => {
      //   // 是否存在的结果 返回
      //   // 存在 true 不存在 false
      //   return _menus.includes(child.name)
      const _length = v.children.filter(child => {
        // 是否存在的结果 返回
        // 存在 true 不存在 false
        return _menus.includes(child.name)
      })
      // 到这 children筛选完毕了 是筛选之后的值
      // children的长度为0
      // children的长度不为0
      if (_length.length > 0) {
        return true
      } else {
        return false
      }
    })
    // addRoutes 动态添加
    router.addRoutes(_newRoutes)
    // 合并到vuex默认的数组中
    // 静态路由 和动态生成的新路由 合并 并赋值
    context.commit('setRoutes', [...constantRoutes, ..._newRoutes])
  }
}

export default {
  namespaced: true,
  state,
  mutations,
  actions
}
